﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Turnero.DAOs;

namespace Turnero.Profesional
{
    public partial class frmAltaProfesional : Form
    {
     
        private DAO_Profesionales profesionalDAO = new DAO_Profesionales();

        public frmAltaProfesional()
        {
            InitializeComponent();
            //cargarComboEspecialidades();
          
            cbxLocalidad.Text = "Alta Gracia";
        }

        //private void cargarComboEspecialidades()
        //{
        //    cbxEspecialidad.DataSource = profesionalDAO.dameEspecialidades();
        //    cbxEspecialidad.DisplayMember = "nombre";
        //    cbxEspecialidad.ValueMember = "idespecialidad";
        //}

     
        private void frmAltaProfesional_Load(object sender, EventArgs e)
        {

        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            txtMP.Text = "";
            txtApellidos.Text = "";
            txtNombres.Text = "";
            txtNroDoc.Text = "";
            txtDomicilio.Text = "";
            txtTelefono.Text = "";
            txtCelular.Text = "";
            txtEmail.Text = "";
            txtCuitCuil.Text = "";
            txtObservaciones.Text = "";

            cbxLocalidad.Text = "Alta Gracia";
            cbxSexo.SelectedIndex = 0;
            cbxTipoDoc.SelectedIndex = 0;
            txtMP.Focus();
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            //Confirmacion de alta para un nuevo profesional
            if (MessageBox.Show("¿Desea dar de alta el nuevo profesional?", "Confirmacion registro", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                //Checkeo de campos obligatorios.
                if (validar())
                {
                    if (dtpFechaNac.Value > System.DateTime.Now)
                    {
                        MessageBox.Show("La fecha de nacimiento del profesional no puede ser mayor al dia de hoy!", "Fecha Incorrecta", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    //Checkeo de existencia de un profesional con ese tipo y nro de documento.
                    if (profesionalDAO.existeProfesional(cbxTipoDoc.SelectedItem.ToString(), txtNroDoc.Text))
                    {
                        MessageBox.Show("Ya existe en el sistema un profesional con ese tipo y nro. de documento!", "Ya existe profesional", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        txtNroDoc.Focus();
                        return;
                    }

                    //Checkeo de existencia de un profesional con esa matricula profesional..
                    if (profesionalDAO.existeProfesionalMatricula(txtMP.Text))
                    {
                        MessageBox.Show("Ya existe en el sistema un profesional con esa matrícula!", "Ya existe profesional", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        txtMP.Focus();
                        return;
                    }

                    string mp, ape, nom, tipodoc, nrodoc, fechanac, sexo, dom, loc, tel, cel, email, cuitcuil, obs, fecaltasistema, especialidad;

                    mp = txtMP.Text.Trim();
                    ape = txtApellidos.Text.ToUpper().Trim();
                    nom = txtNombres.Text.ToUpper().Trim();
                    tipodoc = cbxTipoDoc.SelectedItem.ToString().Trim();
                    nrodoc = txtNroDoc.Text.Trim();
                    fechanac = dtpFechaNac.Value.Date.ToString("yyyy-MM-dd");
                    sexo = cbxSexo.SelectedItem.ToString().Trim();
                    dom = txtDomicilio.Text.ToUpper().Trim();
                    loc = cbxLocalidad.SelectedValue.ToString().Trim();
                    tel = txtTelefono.Text.Trim();
                    cel = txtCelular.Text.Trim();
                    email = txtEmail.Text.Trim();
                    cuitcuil = txtCuitCuil.Text.Trim();
                    obs = txtObservaciones.Text.Trim();
                    fecaltasistema = (System.DateTime.Now).ToString("dd/MM/yyyy");
                    especialidad = cbxEspecialidad.SelectedValue.ToString().Trim();

                    Boolean guardar = profesionalDAO.guardarProfesional(mp, ape, nom, tipodoc, nrodoc, fechanac, sexo, dom, loc, tel, cel, email, cuitcuil, obs, fecaltasistema, especialidad);
                    if (guardar)
                    {
                        MessageBox.Show("El profesional se registro correctamente", "Registro", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("Se produjo un error al intentar registrar el profesional en el sistema", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else
                {
                    MessageBox.Show("Faltan completar datos obligatorios en el formulario", "Datos incompletos", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }
        }

        private Boolean validar()
        {
            Boolean ok = false;

            if (!txtMP.Text.Equals(""))
            {
                ok = true;
            }
            else
            {
                return false;
            }

            if (!txtApellidos.Text.Equals(""))
            {
                ok = true;
            }
            else
            {
                return false;
            }

            if (!txtNombres.Text.Equals(""))
            {
                ok = true;
            }
            else
            {
                return false;
            }

            if (!txtNroDoc.Text.Equals("") && cbxTipoDoc.SelectedIndex > (-1))
            {
                ok = true;
            }
            else
            {
                return false;
            }

            if (!txtDomicilio.Text.Equals(""))
            {
                ok = true;
            }
            else
            {
                return false;
            }

            String temp = (txtCuitCuil.Text.Replace("-", string.Empty)).Trim();
            if (!temp.Equals(""))
            {
                Boolean cuitResultado;
                cuitResultado = validaCuit(txtCuitCuil.Text);
                if (cuitResultado == false)
                {
                    MessageBox.Show("CUIT no válido");
                    txtCuitCuil.Focus();
                    return false;
                }

            }
            else
            {
                ok = true;
            }

            return ok;
        }


        private bool validaCuit(string cuit)
        {
            if (cuit == null)


                return false;



            //Quito los guiones, el cuit resultante debe tener 11 caracteres.
            cuit = cuit.Replace("-", string.Empty);


            if (cuit.Length != 11)
            {

                return false;
            }

            else
            {

                int calculado = CalcularDigitoCuit(cuit);

                int digito = int.Parse(cuit.Substring(10));

                return calculado == digito;

            }
        }

        private int CalcularDigitoCuit(string cuit)
        {

            int[] mult = new[] { 5, 4, 3, 2, 7, 6, 5, 4, 3, 2 };

            char[] nums = cuit.ToCharArray();

            int total = 0;

            for (int i = 0; i < mult.Length; i++)
            {

                total += int.Parse(nums[i].ToString()) * mult[i];
            }

            var resto = total % 11;

            return resto == 0 ? 0 : resto == 1 ? 9 : 11 - resto;

        }


    }
}
